{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# SDE - Lévy processes\n",
    "\n",
    "\n",
    "## Contents\n",
    "   - [Merton process](#sec1)\n",
    "      - [Merton Density](#sec1.1)\n",
    "      - [Parameter estimation](#sec1.2)\n",
    "   - [Variance Gamma process](#sec2)\n",
    "      - [VG Density](#sec2.1)\n",
    "      - [Parameter estimation](#sec2.2)\n",
    "   - [Normal Inverse Gaussian process](#sec3)\n",
    "      - [NIG Density](#sec3.1)\n",
    "      - [Parameter estimation](#sec3.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import scipy as scp\n",
    "import scipy.stats as ss\n",
    "import matplotlib.pyplot as plt\n",
    "from statsmodels.graphics.gofplots import qqplot\n",
    "import scipy.special as scps\n",
    "from functools import partial\n",
    "from scipy.optimize import minimize\n",
    "from math import factorial\n",
    "\n",
    "from functions.probabilities import Gil_Pelaez_pdf\n",
    "from functions.CF import cf_VG, cf_mert, cf_NIG"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id='sec1'></a>\n",
    "# Merton Jump-Diffusion process\n",
    "\n",
    "The Merton process is described by the following equation:\n",
    "\n",
    "\\begin{equation}\n",
    "X_t = \\mu t + \\sigma W_t + \\sum_{i=1}^{N_t} Y_i, \n",
    "\\end{equation}\n",
    "\n",
    "where $N_t \\sim Po(\\lambda t)$ is a Poisson random variable counting the jumps of $X_t$ in $[0,t]$, and \n",
    "\n",
    "$$Y_i \\sim \\mathcal{N}(\\alpha, \\xi^2)$$ \n",
    "\n",
    "are the sizes of the jumps.     \n",
    "In the following I indicate $\\mu \\to$ `mu`, $\\sigma \\to $ `sig`, $\\lambda \\to $ `lam`, $\\alpha \\to $ `muJ` and $\\xi \\to $ `sigJ`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "mu = 0.05     # drift \n",
    "sig = 0.2     # diffusion coefficient\n",
    "lam = 1.2     # jump activity\n",
    "muJ = 0.15    # jump mean size \n",
    "sigJ = 0.5    # jump std deviation\n",
    "T = 2         # terminal time\n",
    "N = 1000000   # number of random variables"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id='sec1.1'></a>\n",
    "## Merton Density"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Simulation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 59.9 s, sys: 172 ms, total: 1min\n",
      "Wall time: 59.8 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "np.random.seed(seed=42) \n",
    "W = ss.norm.rvs(0, 1, N)                                                     # The normal RV vector  \n",
    "P = ss.poisson.rvs(lam*T, size=N)                                            # Poisson random vector\n",
    "Jumps = np.asarray( [ss.norm.rvs(muJ, sigJ, i).sum() for i in P ] )          # Jumps vector\n",
    "X_T = mu*T + np.sqrt(T)*sig*W + Jumps                                        # Merton process"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Merton distribution\n",
    "(I took this formula from section 4.3 of [1] )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "def Merton_density(x, T, mu, sig, lam, muJ, sigJ):\n",
    "    tot = 0\n",
    "    for k in range(20):\n",
    "        tot += (lam*T)**k * np.exp(-(x-mu*T-k*muJ)**2/( 2*(T*sig**2+k*sigJ**2) ) ) \\\n",
    "                / (factorial(k) * np.sqrt(2*np.pi * (sig**2*T+k*sigJ**2) ) )  \n",
    "    return np.exp(-lam*T) * tot"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Merton characteristic function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "cf_M_b = partial(cf_mert, t=T, mu=mu, sig=sig, lam=lam, muJ=muJ, sigJ=sigJ ) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2oAAAF1CAYAAACZNBlsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdeXRV1eH28e/OzQQBEiYjo0ElTEkImEARRASZFFBmKNUKDqUOtfq26vt7q3Wotj9rgYoI4oR1oihRUBEBZayoBAggUxjCEAhKgDCEBDLs948b0iQEksBNTm7u81krC+45557zcFmL8GTvs4+x1iIiIiIiIiLVh5/TAURERERERKQ4FTUREREREZFqRkVNRERERESkmlFRExERERERqWZU1ERERERERKoZFTUREREREZFqRkVNRER8mjHmS2PMr53OISIiUpSKmoiIlMkYs8cYc9YY06jE9iRjjDXGRFzieXsZY1I9kfEC519mjLnnYte01g601r5TjnNZY8y1lZFTRESkJBU1EREprxRg7LkXxphooNalnswY4++JUDWBPgsRESlJRU1ERMrrXeDOIq9/Dfyr6AHGmCBjzEvGmH3GmJ+MMTOMMbUK9vUyxqQaYx43xhwCPgS+BJoaY04VfDUtOMcUY8zBgq8pxpigEuf4P8aYn40xacaY8Zfzhyo66maMudYYs9wYc9wYk26M+XfB9hUFh28oyDm6YPu9xpidxpijxpj5xpimRc7bzxizveBcrxac99x17jLG/McYM9kYcxR42hhzjTHmG2PMkYJrv2+MCStyvj3GmD8aYzYaYzKNMW8aY8ILpm6eNMYsMcbUv5zPQkREqg8VNRERKa/vgHrGmHbGGBcwGnivxDH/C0QCscC1QDPgqSL7rwQaAFfhLn0DgYPW2joFXweB/wf8ouAcHYEuwJ9KnCO04Nx3A9M8WFCeAxYB9YHmwFQAa23Pgv0dC3L+2xjTG/grMApoAuwFZgMUTBH9GPi/QENgO3B9iWt1BXYDVwDPA6bgfE2BdkAL4OkS7xkO9MX9GQ/GXXT/B2iE+3v67y7zzy8iItWEipqIiFTEuVG1vsA24MC5HcYYA9wLPGKtPWqtPQm8AIwp8v584M/W2jPW2qwLXGMc8Ky19mdr7WHgGeCOIvtzCvbnWGsXAKeANhfJ/LIxJuPcF/D5RY7NwV0im1prs621qy5y7DjgLWvtOmvtGdylrFvB/Xq3AJuttQnW2lzgZeBQifcftNZOtdbmWmuzrLU7rbWLCz6bw8Ak4MYS75lqrf3JWnsAWAl8b61dX3D9T4BOF8krIiJeREVNREQq4l3gl8BdlJj2CDQGagNri5SihQXbzzlsrc0u4xpNcY9OnbO3YNs5RwrKzzmngToXOd/vrLVh576AQRc59jHcI1s/GGM2G2MmlDentfYUcAT3SF9TYH+RfRYouWjK/qIvjDFXGGNmG2MOGGNO4B6tbFTiPT8V+X1WKa8v9jmIiIgXUVETEZFys9buxb2oyC1AQond6bjLQocixSjUWlu0PNiSpyzlMgdxj2qd07JgW6Wz1h6y1t5rrW0K/AZ49SIrPRbLaYwJwT3N8QCQhnvq5Ll9pujrc5cr8fqvBdtirLX1gF/hLo0iIuKDVNRERKSi7gZ6W2szi2601uYDrwOTjTFXABhjmhlj+l/kXD8BDY0xoUW2fQj8yRjTuOBer6c4/164SmGMGWmMOVeojuEuTnlFsl5d5PAPgPHGmNiCxU5ewD0VcQ/wBRBtjLm9YEXHB3DfW3cxdXFP48wwxjQD/uiJP5OIiHgnFTUREakQa+0ua23iBXY/DuwEviuYvreEi9w/Zq3dhruY7S6YLtkU+AuQCGwENgHrCrZVhXjge2PMKWA+8LC1NqVg39PAOwU5R1lrvwaeBObiHkG7hoL78ay16cBI4EXc0yHbF/yZzlzk2s8AnYHjuIteyRFLERHxIcY9bV5EREQqizHGD/c9auOstUudziMiItWfRtREREQqgTGmvzEmrGBa5P/gvt/sO4djiYiIl1BRExERqRzdgF24F1kZDNx+kUcSiIiIFKOpjyIiIiIiItWMRtRERERERESqGRU1ERERERGRasbfqQs3atTIRkREOHV5ERERERERR61duzbdWtu4tH2OFbWIiAgSEy/0GB4REREREZGazRiz90L7NPVRRERERESkmlFRExERERERqWZU1ERERERERKoZx+5RExERERHxJTk5OaSmppKdne10FKliwcHBNG/enICAgHK/R0VNRERERKQKpKamUrduXSIiIjDGOB1Hqoi1liNHjpCamkqrVq3K/T5NfRQRERERqQLZ2dk0bNhQJc3HGGNo2LBhhUdSVdRERERERKqISppvupS/dxU1EREREREfYYzhjjvuKHydm5tL48aNGTRoUIXOs2fPHj744ANPxwNg2bJlFc5TlqeeeoolS5YAMGXKFE6fPu3R81cGFTURERERER8REhLCjz/+SFZWFgCLFy+mWbNmFTpHbm5upRa1yvDss89y8803AypqIiIiIiJSDQ0cOJAvvvgCgA8//JCxY8cW7svMzGTChAnEx8fTqVMn5s2bB8CsWbMYOXIkgwcPpl+/fjzxxBOsXLmS2NhYJk+eTHZ2NuPHjyc6OppOnTqxdOnSwvcNGzaMAQMG0Lp1ax577LFSMy1cuJC2bdvSo0cPEhISypWntPPm5eVx1113ERUVRXR0NJMnTwbgrrvu4uOPP+bll1/m4MGD3HTTTdx00028+eabPPLII4XXe/3113n00Uc99VFfFq36KCIiIiJS1X7/e0hK8uw5Y2NhypQyDxszZgzPPvssgwYNYuPGjUyYMIGVK1cC8Pzzz9O7d2/eeustMjIy6NKlS+FI1OrVq9m4cSMNGjRg2bJlvPTSS3z++ecA/OMf/wBg06ZNbNu2jX79+pGcnAxAUlIS69evJygoiDZt2vDQQw/RokWLwjzZ2dnce++9fPPNN1x77bWMHj26cN/F8pR23p9//pkDBw7w448/ApCRkVHsz/673/2OSZMmsXTpUho1akRmZiYxMTG8+OKLBAQE8Pbbb/Paa69d0sfvaRpRExERERHxITExMezZs4cPP/yQW265pdi+RYsW8be//Y3Y2Fh69epFdnY2+/btA6Bv3740aNCg1HOuWrWq8N63tm3bctVVVxUWtT59+hAaGkpwcDDt27dn7969xd67bds2WrVqRevWrTHG8Ktf/apceUo779VXX83u3bt56KGHWLhwIfXq1bvoZxESEkLv3r35/PPP2bZtGzk5OURHR1fg06w8GlETEamujh+Hr76CxERo0QJ694YOHZxOJSIinlCOka/KNGTIEP7whz+wbNkyjhw5UrjdWsvcuXNp06ZNseO///57QkJCLng+a+0F9wUFBRX+3uVykZube94xF1oV8WJ5Sjtv/fr12bBhA1999RXTpk1jzpw5vPXWWxfMBnDPPffwwgsv0LZtW8aPH3/RY6uSRtRERKqjr76Ctm1h9GiYNAl+9zuIjibv3nuZuWgzsc8uYuaKXeTlX/gbo4iIyIVMmDCBp5566rzRo/79+zN16tTC4rV+/fpS31+3bl1OnjxZ+Lpnz568//77ACQnJ7Nv377zytWFtG3blpSUFHbt2gW475uraJ5z0tPTyc/PZ/jw4Tz33HOsW7euzOxdu3Zl//79fPDBB8Xu13OaipqISHXz3nswYAA0aADLlkF2NqSmkvLI/zA4L4bJi5LJOJ3D5MU7GPLKKlLSM51OLCIiXqZ58+Y8/PDD521/8sknycnJISYmhqioKJ588slS3x8TE4O/vz8dO3Zk8uTJ3H///eTl5REdHc3o0aOZNWtWsRGviwkODmbmzJnceuut9OjRg6uuuqrCec45cOAAvXr1IjY2lrvuuou//vWv5x1z3333MXDgQG666abCbaNGjaJ79+7Ur1+/XJmrgrnYMGVliouLs4mJiY5cW0SkusnLt7y5ajevLt7O/Uve4u5ax3B98TkJ+/57E/RTH24kMzsHy3+nh/gZqF87kLVP9nUitoiIVMDWrVtp166d0zGkFIMGDeKRRx6hT58+lXaN0v7+jTFrrbVxpR2ve9RERByWkp7JA++vIyX9FFk5lsnX/5J/NarLHZsO0Tg0uPC48LBgdh0qPq8/30JkeN2qjiwiIlIjnFtJsmPHjpVa0i6Fpj6KiDhsxPRv2XboBFk5+QBkBQRx4MRZpi5ILnZc18iGBPkX/2c7xM8yKr55lWUVERGpScLCwkhOTuajjz5yOsp5VNRERBzWOrwOJdcEsRauDAsutq1DizCMX/FVsVxZWfRpWquyI4qIiEgV09RHERGHjY5vwaadP5HpF1C4LdDfjy6RDYsdVyvQxQvjOha+Dtu0gd6jRkPuAzB1apXlFRERkcqnETUREYf1CcrEdfZMsW1+foYOLcIu+r6M6I7w29/C9OmwfXtlRhQREZEqphE1ERGH1fvnJDa+8w6kpJBwomLv/WLcRPrPmkXao4+xZtIMhrVpUjkhRUREpEppRE1ExEkZGfDuu3DnndCk4iXrTMNG7Pz1fbRYMJ/QLZsqIaCIiNQkLpeL2NjYwq89e/Z45Lz33HMPW7ZsueT3z5gxg3/9618eyVJRt9xyCxkZGWUfWMU0oiYi4qQPP4SsLPjNby75FMkTJnL1e2/R5rWpMLSfB8OJiIiTCp+xuWwX9/e6hrt7XI2rxKJSFVWrVi2SkpI8lNAtLy+PN954o8Lvcblcha8nTpzo0Uwl5ebm4u9fevVZsGBBpV77UmlETUTESW+8QUa7DiSENCFhe9olnSK3bj1Sxv6aZou+gB07PBxQRESckJKeyeCpq5i8eAcZp3OYvHgHQ15ZRUp6psevlZ2dzfjx44mOjqZTp04sXboUgFmzZvHggw8WHjdo0CCWLVsGQJ06dXjqqafo2rUrq1evplevXiQmJgKwaNEiunXrRufOnRk5ciSnTp0CICIigmeffZYePXqctxz+008/zUsvvQRAr169ePzxx+nSpQuRkZGsXLkSgK5du7J58+bC9/Tq1Yu1a9eSmZnJhAkTiI+Pp1OnTsybN68w/8iRIxk8eDD9+vUjLS2Nnj17EhsbS1RUVOF5IyIiSE9PB2DSpElERUURFRXFlClTANizZw/t2rXj3nvvpUOHDvTr14+srCzP/QVcgIqaiIhT1q+HdevYM3wsmMv7CenOO+8hPyAQCr7JiYiId/vvMzbzAMjKyWNr2glGTP/2ss6blZVVOO1x6NChAEybNg2ATZs28eGHH/LrX/+a7Ozsi54nMzOTqKgovv/+e3r06FG4PT09nb/85S8sWbKEdevWERcXx6RJkwr3BwcHs2rVKsaMGXPR8+fm5vLDDz8wZcoUnnnmGQDGjBnDnDlzAEhLS+PgwYNcd911PP/88/Tu3Zs1a9awdOlS/vjHP5KZ6S60q1ev5p133uGbb77hgw8+oH///iQlJbFhwwZiY2OLXXPt2rW8/fbbfP/993z33Xe8/vrrrF+/HoAdO3bwwAMPsHnzZsLCwpg7d26Zn/Xl0tRHERGnfPABBASwf9DQyz7VmUaN2Tt0FFe/8w48/zw0auSBgCIi4pTW4XX4bvfRYtvyLUSG172s85Y29XHVqlU89NBDALRt25arrrqK5OTki57H5XIxfPjw87Z/9913bNmyhe7duwNw9uxZunXrVrh/9OjR5co5bNgwAK677rrC++hGjRpF3759eeaZZ5gzZw4jR44E3CN48+fPLxyRy87OZt++fQD07duXBg0aABAfH8+ECRPIycnh9ttvP6+orVq1iqFDhxISElKYYeXKlQwZMoRWrVoVHl80U2XSiJqIiBOshY8+gr59yQmr75FT7h43Hs6cgbff9sj5RETEOaPjWxAS6Cq2LSTQxaj45h6/lrW21O3+/v7k5+cXvi46yhYcHFzsHrOi5+rbty9JSUkkJSWxZcsW3nzzzcL950pQWYKCggB3IczNzQWgWbNmNGzYkI0bN/Lvf/+7cFTOWsvcuXMLr7lv3z7atWt33vV69uzJihUraNasGXfcccd5i5dc6HMomqdkpsqkoiYi4oQ1a2DvXhg1ymOnPBHZFnr0gNdegyLfWEVExPv0aRd+3sIhLj9Dn3bhHr9Wz549ef/99wFITk5m3759tGnThoiICJKSksjPz2f//v388MMPZZ7rF7/4Bf/5z3/YuXMnAKdPny5zdK4ixowZw4svvsjx48eJjo4GoH///kydOrWwaJ2brljS3r17ueKKK7j33nu5++67WbduXbH9PXv25NNPP+X06dNkZmbyySefcMMNN3gse0Vp6qOIiBM++ggCAuC22+Anz92Q/MNtY+jyxwdZ9da/6XHPWI+dV0REqla94AA2Pt2/Sq51//33M3HiRKKjo/H392fWrFkEBQXRvXt3WrVqRXR0NFFRUXTu3LnMczVu3JhZs2YxduxYzpw5A8Bf/vIXIiMjPZJ1xIgRPPzwwzz55JOF25588kl+//vfExMTg7WWiIgIPv/88/Peu2zZMv7+978TEBBAnTp1zhtR69y5M3fddRddunQB3I8c6NSpU5VMcyyNudgQX2WKi4uz51aGERHxJQnbDtK/bzdOXtOab19716Pn9jt7hgG94jjaKY6mSxZ69NwiInJ5tm7dWjglT3xPaX//xpi11tq40o7X1EcRkSpWd2cyIan7ONjb8z8pzQ8MYu/wMTRZuhj27/f4+UVERKRqqKiJiFSxK5cvAeCnG3tXyvlTRt/hXqykgg8fFRERkepDRU1EpIpduexrMtq2J+vKppVy/tPNW/LTDTfB669DFaxKJSIiIp6noiYiUpWOHaPh+jUcuvHmSr1MyqhxkJYGixZV6nVERESkcqioiYhUpcWL8cvL49CNfSr1Mod69iGvUSNmfrqG2GcXMXPFLvLynVk8SkRERCpORU1EpCotXszZuvU4FtOpUi/zc1Y+g+96mcl1o8g4ncPkxTsY8soqUtIzK/W6IiIi4hkqaiIiVWnJEtK7Xo/1r9zHWE5dkMw2Vz2yAoIByMrJY2vaCUZM/7ZSrysiIiKeoQdei4hUld27Yc8efv7VPZV+qfCwYHYdOlVsW76FyPC6lX5tEREpn4TtaR4937A2Tco85uWXX2b69Ol07tyZ999/36PXrwzz589ny5YtPPHEE5Vy/gt9HgkJCUybNo2vv/4agFWrVvHggw+SmJiIf4kftr799tv885//BGDLli20adMGl8vFgAED+Nvf/nbJ2VTURESqSsE/9j9ff0OlX6prZEMOHc0i82xe4baQQBej4ptX+rVFRKT6evXVV/nyyy9p1apVse25ubnnFZDqYMiQIQwZMqTSzn+hz2PYsGG8+eabfPDBB4waNYr777+fGTNmlPoZjR8/nvHjxwMQERHB0qVLadSo0WVn09RHEZGqsmQJNG3KqVbXVvqlOrQIw+Vnim1z+Rn6tAuv9GuLiEj1NHHiRHbv3s2QIUOYPHkyTz/9NPfddx/9+vXjzjvvJC8vjz/+8Y/Ex8cTExPDa6+9BoC1lgcffJD27dtz6623csstt/Dxxx8D7mKSnp4OQGJiIr169QIgMzOTCRMmEB8fT6dOnZg3bx4As2bNYtiwYQwYMIDWrVvz2GOPFeZbuHAhnTt3pmPHjvTp06fw+AcffBCAw4cPM3z4cOLj44mPj+c///kPAMuXLyc2NpbY2Fg6derEyZMnz/uzT5o0iaioKKKiopgyZUqpn0dJU6dO5U9/+hN//vOfiY+P5/rrr7/sv4OKqH61WUSkJrIWli6FAQPAmLKPv0y1Al1sfLq/+8XNN0NKCuzcWSXXFhGR6mnGjBksXLiwcMTn6aefZu3ataxatYpatWoxc+ZMQkNDWbNmDWfOnKF79+7069eP9evXs337djZt2sRPP/1E+/btmTBhwkWv9fzzz9O7d2/eeustMjIy6NKlCzff7H40TVJSEuvXrycoKIg2bdrw0EMPERwczL333suKFSto1aoVR48ePe+cDz/8MI888gg9evRg37599O/fn61bt/LSSy8xbdo0unfvzqlTpwgODi72vrVr1/L222/z/fffY62la9eu3Hjjjed9HiVdffXVjB49mldeeYVdu3Zdxid/acpV1IwxA4B/Ai7gDWvt30rs7wXMA1IKNiVYa5/1YE4REe+WnAyHD0PPnlV2yXP3PrTsO4S4Jx6G776Dbt2q7PoiIlL9DRkyhFq1agGwaNEiNm7cWDhadvz4cXbs2MGKFSsYO3YsLpeLpk2b0rt37zLPu2jRIubPn89LL70EQHZ2Nvv27QOgT58+hIaGAtC+fXv27t3LsWPH6NmzZ+EUxAYNGpx3ziVLlrBly5bC1ydOnODkyZN0796dRx99lHHjxjFs2DCaNy8+zX/VqlUMHTqUkJAQwD2tceXKlXTqdPEVmPPz81myZAl16tRh7969HpnOWBFlFjVjjAuYBvQFUoE1xpj51totJQ5daa0dVAkZRUS836pV7l979KjySx+8eQB5gUG4Zs9WURMRkWLOlRdwT3GcOnUq/fv3L3bMggULMBeYkeHv709+fj7gLmNFzzV37lzatGlT7Pjvv/+eoKCgwtcul4vc3FystRe8xjn5+fmsXr26sFie88QTT3DrrbeyYMECfvGLX7BkyRLatm1bLMulmDZtGlFRUTz33HM88MADrF69usyMnlSee9S6ADuttbuttWeB2cBtlRtLRKSG+c9/oGFDKPENqyrk1qnrfsD2nDmQl1f2G0RExCf179+f6dOnk5OTA0BycjKZmZn07NmT2bNnk5eXR1paGkuXLi18T0REBGvXrgVg7ty5xc41derUwpK0fv36i167W7duLF++nJQU9wS90qY+9uvXj1deeaXwdVJSEgC7du0iOjqaxx9/nLi4OLZt21bsfT179uTTTz/l9OnTZGZm8sknn3DDDRdf2OvQoUNMmjSJF198kQEDBtCsWTPeeOONi77H08oz9bEZsL/I61SgaynHdTPGbAAOAn+w1m4ueYAx5j7gPoCWLVtWPK2IiLdatQq6d3fsHrH9t95Os8ULYPlyKMeUFRERqXzlWU6/Kt1zzz3s2bOHzp07Y62lcePGfPrppwwdOpRvvvmG6OhoIiMjufHGGwvf8+c//5m7776bF154ga5d/1sRnnzySX7/+98TExODtZaIiAg+//zzC167cePGzJw5k2HDhpGfn88VV1zB4sWLix3z8ssv88ADDxATE0Nubi49e/ZkxowZTJkyhaVLl+JyuWjfvj0DBw4s9r7OnTtz11130aVLl8I/Z1nTHh999FEee+wxGjduDMCUKVO44YYbGD58eKnTMiuDKWso0BgzEuhvrb2n4PUdQBdr7UNFjqkH5FtrTxljbgH+aa1tfbHzxsXF2cTExMv+A4iIVHdffLuJW7vHsOkP/48d9zzgSAa/7Cxu79ERxoyB1193JIOIiK/bunUr7dq1czrGZbvrrrsYNGgQI0aMcDqKVynt798Ys9ZaG1fa8eWZ+pgKtCjyujnuUbNC1toT1tpTBb9fAAQYY6r2bjsR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\n",
      "text/plain": [
       "<Figure size 1080x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(X_T.min(), X_T.max(), 500)\n",
    "y = np.linspace(-3,5,50)\n",
    "\n",
    "plt.figure(figsize=(15,6))\n",
    "plt.plot(x, Merton_density(x,T,mu, sig, lam, muJ, sigJ), color='r', label=\"Merton density\")\n",
    "plt.plot(y,[Gil_Pelaez_pdf(i,cf_M_b,np.inf) for i in y], 'p', label=\"Fourier inversion\" )\n",
    "plt.hist(X_T, density=True, bins=200, facecolor=\"LightBlue\", label=\"frequencies of X_T\")\n",
    "plt.legend(); plt.title(\"Merton Histogram\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "qqplot(X_T, line='s');  plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id='sec1.2'></a>\n",
    "## Parameter estimation\n",
    "\n",
    "In this section I will use the function `scipy.optimize.minimize` to minimize the negative of the log-likelihood function i.e. I will **maximize** the log-likelihood.\n",
    "\n",
    "This is not an easy task... The model has 5 parameters, which means that the routine will be very slow, and we are not sure it will work.     \n",
    "It is possible that the log-likelihood function has several local maximum points, or that some overflows appear.\n",
    "\n",
    "We have to try several methods until we find the one that better performs.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Maximum Likelihood Estimation\n",
    "\n",
    "Initial guesses are important! We can gain some information of the unknown parameters from the histogram plot.\n",
    "\n",
    "I will use:\n",
    "- Zero mean. It makes sense because the histogram is centered around the value zero.\n",
    "- Diffusion coefficient of 0.5 is quite high for real financial data. But in general we expect a $\\sigma < 1$. Moreover, looking at the histogram and pretending it is a Normal distribution. A standard deviation of about 0.5 is reasonable.\n",
    "- If the time is considered in years. $\\lambda=1$ means one (expected) jump per year, which makes sense. \n",
    "- The histogram has positive skew. Therefore `muJ` is positive and 0.2 makes sense. This parameter affects the skewness but also the mean, which in the plot looks positive.\n",
    "- About `sigJ` we can repeat the arguments for $\\sigma$. I set it to $1$, because I expect that a jump has a standard deviation higher than the usual diffusion standard deviation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 4min 17s, sys: 104 ms, total: 4min 17s\n",
      "Wall time: 4min 17s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       " final_simplex: (array([[0.04779116, 0.19977255, 1.20721301, 0.15082027, 0.4984214 ],\n",
       "       [0.04778952, 0.19977019, 1.20721463, 0.15082272, 0.49842202],\n",
       "       [0.04779106, 0.19977582, 1.2072159 , 0.15082178, 0.4984185 ],\n",
       "       [0.04778677, 0.19975872, 1.20728284, 0.15081694, 0.49841178],\n",
       "       [0.04778787, 0.19975926, 1.20725522, 0.15081897, 0.4984165 ],\n",
       "       [0.04778277, 0.19975784, 1.20728373, 0.15081969, 0.49841181]]), array([1241021.32812604, 1241021.32812784, 1241021.32812826,\n",
       "       1241021.32812853, 1241021.32813768, 1241021.32813834]))\n",
       "           fun: 1241021.328126041\n",
       "       message: 'Optimization terminated successfully.'\n",
       "          nfev: 588\n",
       "           nit: 359\n",
       "        status: 0\n",
       "       success: True\n",
       "             x: array([0.04779116, 0.19977255, 1.20721301, 0.15082027, 0.4984214 ])"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "def log_likely_Merton(x, data, T):\n",
    "    return (-1) * np.sum( np.log( Merton_density(data, T, x[0], x[1], x[2], x[3], x[4]) ))\n",
    "\n",
    "minimize(log_likely_Merton, x0=[0,0.5,1,0.2,1], method='Nelder-Mead', args=(X_T,T) )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Very good!!\n",
    "The Nelder-Mead method works! The results are printed in the last line, and we can see that the values correspond to the original values.\n",
    "\n",
    "The BFGS method works too. I tried also L-BFGS-B and SLSQP which instead do not work.\n",
    "\n",
    "See here for a list of possible methods: [link](https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id='sec2'></a>\n",
    "# Variance Gamma process\n",
    "\n",
    "\n",
    "Usually the [Gamma distribution](https://en.wikipedia.org/wiki/Gamma_distribution) is \n",
    "parametrized by a shape and scale positive parameters \n",
    "\n",
    "$$T \\sim \\Gamma(a,b).$$ \n",
    "\n",
    "The random variable $T_t \\sim \\Gamma(a t, b)$ has the shape parameter dependent on $t$ (the shape is a linear function of $t$).    \n",
    "The density function is \n",
    "\n",
    "$$ f_{T_t}(x) = \\frac{b^{-a t}}{\\Gamma(a t)}x^{a t -1}e^{-\\frac{x}{b}}$$ \n",
    "\n",
    "with \n",
    "\n",
    "$$\\mathbb{E}[T_t]= a b t, \\quad \\mbox{and} \\quad \\text{Var}[T_t] = a b^2 t. $$ \n",
    "\n",
    "When working with the VG process, it is common to use a parametrization such that \n",
    "\n",
    "$$\\mathbb{E}[T_t]=\\mu t \\quad \\mbox{and} \\quad \\text{Var}[T_t] = \\kappa t $$ \n",
    "\n",
    "therefore $\\mu = ab$ and $\\kappa = a b^2$.\n",
    "Inverting we obtain $b=\\frac{\\kappa}{\\mu}$, $a=\\frac{\\mu^2}{\\kappa}$.\n",
    "\n",
    "The new parametrization is with respect to the new parameters $\\mu$ and $\\kappa$, such that  \n",
    "\n",
    "$$T_t \\sim \\Gamma(\\mu t, \\kappa t)$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Variance Gamma\n",
    "\n",
    "If we consider a Brownian motion with drift \n",
    "\n",
    "$$X_t = \\theta t + \\sigma W_t$$ \n",
    "\n",
    "and substitute the time variable with a Gamma random variable \n",
    "$T_t \\sim \\Gamma(t,\\kappa t)$,\n",
    "we obtain the **Variance Gamma** process:\n",
    "\n",
    "$$ X_{t} := \\theta T_t + \\sigma W_{T_t} .$$\n",
    "\n",
    "where we chose $T_t \\sim \\Gamma(\\mu t, \\kappa t)$ with $\\mu=1$ in order to have $\\mathbb{E}[T_t]= t$.\n",
    "\n",
    "It depends on three parameters:\n",
    "\n",
    "- $\\sigma$, the volatility of the Brownian motion\n",
    "- $\\kappa$, the variance of the Gamma process\n",
    "- $\\theta$, the drift of the Brownian motion\n",
    "\n",
    "The characteristic function is: \n",
    "\n",
    "$$ \\phi_{X_t}(u) = \\biggl( 1-i\\theta \\kappa u + \\frac{1}{2} \\bar\\sigma^2 \\kappa u^2 \\biggr)^{-\\frac{t}{\\kappa}}.$$\n",
    "\n",
    "The first four moments are: \n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    " \\mathbb{E}[X_t] &= t\\theta. \\\\ \\nonumber\n",
    " \\text{Var}[X_t] &= t(\\sigma^2 + \\theta^2 \\kappa). \\\\ \\nonumber\n",
    " \\text{Skew}[X_t] &= \\frac{t (2\\theta^3\\kappa^2 + 3 \\sigma^2 \\theta \\kappa)}{\\bigl(\\mbox{Var}[X_t])^{3/2}}. \\\\ \\nonumber\n",
    " \\text{Kurt}[X_t] &= \\frac{t (3\\sigma^4 \\kappa + 12\\sigma^2 \\theta^2 \\kappa^2 +6\\theta^4\\kappa^3)}{\\bigl(\\mbox{Var}[X_t]\\bigr)^2}.\\nonumber \n",
    "\\end{aligned} \n",
    "$$\n",
    "\n",
    "Additional information can be found in **A.3**.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id='sec2.1'></a>\n",
    "## VG Density\n",
    "\n",
    "For the formula of the VG density see **A.3**. For information on Fourier inversion formula see **1.3**."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Simulation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "T = 2           # terminal time \n",
    "N= 1000000      # number of generated random variables\n",
    "\n",
    "theta = -0.1    # drift of the Brownian motion \n",
    "sigma = 0.2     # volatility of the Brownian motion\n",
    "kappa = 0.5     # variance of the Gamma process"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(seed=42) \n",
    "G = ss.gamma( T/kappa, scale=kappa).rvs(N)     # The gamma RV\n",
    "Norm = ss.norm.rvs(0,1,N)                      # The normal RV  \n",
    "X = theta * G + sigma * np.sqrt(G) * Norm"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### VG Density"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def VG_density(x,T,c,theta,sigma,kappa):\n",
    "    return 2 * np.exp( theta*(x-c) / sigma**2 ) / (kappa**(T/kappa) * np.sqrt(2*np.pi) *\\\n",
    "        sigma * scps.gamma(T/kappa) ) * \\\n",
    "        ((x-c)**2 / (2*sigma**2 /kappa +theta**2) )**( T/(2*kappa)-1/4) * \\\n",
    "        scps.kv(T/kappa-1/2, sigma**(-2) * np.sqrt((x-c)**2 * (2*sigma**2/kappa + theta**2)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Fourier inversion of the VG characteristic function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "cf_VG_b = partial(cf_VG, t=T, mu=0, theta=theta, sigma=sigma, kappa=kappa ) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Histogram vs density vs Fourier inversion"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6IAAAEvCAYAAABfSXyoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdeVyVVeLH8c8BRFxKc8lyGbFSUxFRcUtzzS3NklzTymzT9mlanBrba5py0tTSQStrsqwp1DRzt8xcCow0F9wXBAtck0W28/sD4yeKinrhwOX7fr181X3uuc/zFQr4cs49j7HWIiIiIiIiIlJYfFwHEBERERERkZJFRVREREREREQKlYqoiIiIiIiIFCoVURERERERESlUKqIiIiIiIiJSqFRERUREREREpFD5ubpwlSpVbGBgoKvLi4iIiIiISAGKiopKtNZWzes5Z0U0MDCQyMhIV5cXERERERGRAmSM2X2m57Q0V0RERERERAqViqiIiIiIiIgUKhVRERERERERKVTO3iMqIiIiIiLeIz09ndjYWFJTU11HkUIWEBBAzZo1KVWqVL5foyIqIiIiIiIXLTY2lksuuYTAwECMMa7jSCGx1nLgwAFiY2OpU6dOvl+npbkiIiIiInLRUlNTqVy5skpoCWOMoXLlyuc9E64iKiIiIiIiHqESWjJdyOddRVRERERERIq9jh07smDBglzHxo0bxwMPPADA1q1b6d27N1dffTXNmzenU6dOLF++PF/njYyM9FjOuLg4+vXrB0B0dDTz5s3z2LmLExVREREREREp9gYPHsyMGTNyHZsxYwaDBw8mNTWVXr16cd9997F9+3aioqKYMGECO3bsKPSc1atX54svvgBUREVERERKtMwsS/jy7YS8tJDw5dvJzLKuI4nIeerXrx9z587l+PHjAOzatYu4uDjatWvH9OnTadOmDX369MkZHxQUxLBhw047T0pKCoMGDSI4OJiBAweSkpKS89zChQtp06YNzZo1o3///hw7dgyAwMBAnn/+eZo1a0bjxo3ZvHkzAN999x0hISGEhITQtGlT/vjjD3bt2kVQUBBpaWk899xzfPbZZ4SEhPDZZ59Rt25dEhISAMjKyuKaa64hMTGxoD5kTqmIioiISIm2MzGJmyasYOyirRxOTmfsoq30mbiCnYlJrqOJ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\n",
      "text/plain": [
       "<Figure size 1152x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(X.min(), X.max(), 500)\n",
    "y = np.linspace(-2,1,30)\n",
    "\n",
    "plt.figure(figsize=(16,5))\n",
    "plt.plot(x, VG_density(x,T,0,theta,sigma,kappa), color='r', label=\"VG density\")\n",
    "plt.plot(y,[Gil_Pelaez_pdf(i,cf_VG_b,np.inf) for i in y], 'p', label=\"Fourier inversion\" )\n",
    "plt.hist(X, density=True, bins=200, facecolor=\"LightBlue\", label=\"frequencies of X\")\n",
    "plt.legend(); plt.title(\"Variance Gamma Histogram\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "qqplot(X, line='s');  plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id='sec2.2'></a>\n",
    "## Parameter estimation\n",
    "\n",
    "\n",
    "Let us consider a VG process with an additional (deterministic) drift $c$:\n",
    "\n",
    "$$ Y_t = c t + X^{VG}_t $$\n",
    "\n",
    "such that $\\mathbb{E}[Y_t] = t (\\theta + c)$.\n",
    "\n",
    "This is a more general setting that keeps into account a possible \"location\" parameter for the VG distribution (the function `VG_density` already considers the location parameter $c$).\n",
    "\n",
    "The formulas for higher order moments are unchanged.    \n",
    "The characteristic function if $Y_t$ is:\n",
    "\n",
    "$$ \\phi_{Y_t}(u) = e^{icu} \\biggl( 1-i\\theta \\kappa u + \\frac{1}{2} \\sigma^2 \\kappa u^2 \\biggr)^{-\\frac{t}{\\kappa}}.$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Approximated Method of Moments\n",
    "\n",
    "This method suggests to consider only the first order terms in $\\theta$ and ignore $\\theta^2$, $\\theta^3$ and $\\theta^4$.      \n",
    "This method is motivated by the fact that usually $\\theta$ is quite small.\n",
    "\n",
    "Since there are 4 parameters to estimate, we need 4 equations i.e. the formulas for the first 4 moments.     \n",
    "We get:\n",
    "\n",
    "$$ \\begin{aligned}\n",
    " \\mathbb{E}[X_t] &= t \\, (c+\\theta). \\\\\n",
    " \\text{Var}[X_t] &= t \\, \\sigma^2. \\\\ \n",
    " \\text{Skew}[X_t] &= \\frac{1}{\\sqrt{t}} \\frac{3 \\theta \\kappa}{\\sigma}. \\\\\n",
    " \\text{Kurt}[X_t] &= \\frac{1}{t} 3\\kappa \n",
    "\\end{aligned} $$\n",
    "\n",
    "Inverting we have:\n",
    "\n",
    "$$ \\begin{aligned}\n",
    " \\kappa &= \\frac{t \\text{Kurt}[X_t]}{3} \\\\ \n",
    " \\sigma &= \\frac{\\text{Std}[X_t]}{\\sqrt{t}}. \\\\ \n",
    " \\theta &= \\frac{\\sqrt{t} \\text{Skew}[X_t] \\sigma}{3 \\kappa}. \\\\\n",
    "  c &= \\frac{\\mathbb{E}[X_t]}{t} - \\theta. \\\\\n",
    "\\end{aligned} $$\n",
    "\n",
    "From the formulas above we obtained interesting information:\n",
    "- The parameter $\\theta$ is connected with the **skewness**. (The sign of $\\theta$ indicates if the distribution has positive or negative skewness)\n",
    "- The parameter $\\kappa$ represents the amount of **kurtosis** of the distribution. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Estimated parameters: \n",
      "\n",
      " c=-0.018543777252323673 \n",
      " theta=-0.08144922792709254 \n",
      " sigma=0.21200595513004386 \n",
      " kappa=0.5904713302435356\n",
      "\n",
      "Estimated c + theta =  -0.09999300517941621\n"
     ]
    }
   ],
   "source": [
    "sigma_mm1 =  np.std(X) / np.sqrt(T)                                \n",
    "kappa_mm1 = T * ss.kurtosis(X)/3                              \n",
    "theta_mm1 = np.sqrt(T) * ss.skew(X) * sigma_mm1 / (3*kappa_mm1)   \n",
    "c_mm1     = np.mean(X)/T - theta_mm1\n",
    "\n",
    "print(\"Estimated parameters: \\n\\n c={} \\n theta={} \\n sigma={} \\n \\\n",
    "kappa={}\\n\".format(c_mm1,theta_mm1,sigma_mm1,kappa_mm1))\n",
    "print(\"Estimated c + theta = \", c_mm1 + theta_mm1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The approximated method gives very good results!! \n",
    "\n",
    "Only two remarks:     \n",
    "- We simulated the process with $c=0$ and $\\theta=-0.1$. Therefore, only the parameter $\\theta$ contributes to the mean of the distribution. The results of this estimation process, assign a little part of the true value of $\\theta$ to $c$, which instead should be zero.\n",
    "- The estimated value of the parameter $\\kappa$ is not very precise.\n",
    "\n",
    "Let us see if we can do better!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### MLE\n",
    "\n",
    "An alternative method to estimate the parameters is to use the Maximum Likelihood Estimator.\n",
    "\n",
    "In the following cell I use the function `scipy.optimize.minimize` to minimize the negative of the log-likelihood, i.e. I maximize the log-likelihood.\n",
    "\n",
    "Since there are 4 parameters to be estimated, the routine can be very slow.    \n",
    "Fortunately there are some tricks we can use in order to speed up the task.\n",
    "\n",
    "1) We can use the values estimated with the *approximated method of moments* as **initial guesses**. It is reasonable to expect that they are quite good initial guesses.\n",
    "\n",
    "2) Look at the **Histogram** above. From the histogram we can extract some information:\n",
    "   - The range for the mean $c$ i.e. $[-1,1]$ \n",
    "   - The skewness is negative, therefore $\\theta$ must be negative. I chose the interval $[-1,-10^{-15}]$.\n",
    "   - For $\\sigma$ and $\\kappa$ I chose the reasonable intervals $[10^{-15},2]$ and $[10^{-15},\\infty)$.  \n",
    "\n",
    "Using a method with constraints such as 'L-BFGS-B' is helpful to reduce the computational time. \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 1min 21s, sys: 12 ms, total: 1min 21s\n",
      "Wall time: 1min 21s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "      fun: 194429.33656230127\n",
       " hess_inv: <4x4 LbfgsInvHessProduct with dtype=float64>\n",
       "      jac: array([-2.64262781, -3.74857336, -3.707828  ,  0.17462298])\n",
       "  message: b'CONVERGENCE: REL_REDUCTION_OF_F_<=_FACTR*EPSMCH'\n",
       "     nfev: 110\n",
       "      nit: 18\n",
       "   status: 0\n",
       "  success: True\n",
       "        x: array([ 0.00442098, -0.10220357,  0.19960392,  0.48852215])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "def log_likely(x, data, T):\n",
    "    return (-1) * np.sum( np.log( VG_density(data, T, x[0], x[1], x[2], x[3]) ))\n",
    "\n",
    "minimize(log_likely, x0=[c_mm1,theta_mm1,sigma_mm1,kappa_mm1], method='L-BFGS-B', args=(X,T), tol=1e-8,\n",
    "        bounds=[[-1,1],[-1,-1e-15],[1e-15,2],[1e-15,None]])   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Very good! \n",
    "\n",
    "These values (the last line of the output) are very satisfactory!\n",
    " "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id='sec3'></a>\n",
    "## NIG process\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Inverse Gaussian (IG) distribution\n",
    "\n",
    "Usually, the [IG distribution](https://en.wikipedia.org/wiki/Inverse_Gaussian_distribution) is parametrized by two parameters: the mean ($\\mu$) and the shape ($\\lambda$):\n",
    "\n",
    "$$ T \\sim IG(\\mu, \\lambda) $$\n",
    "\n",
    "where\n",
    "\n",
    "$$ f_{T}(x) = \\sqrt{\\frac{\\lambda}{2\\pi x^3}} e^{- \\frac{\\lambda(x-\\mu)^2}{2\\mu^2 x} } $$ \n",
    "\n",
    "with \n",
    "\n",
    "$$\\mathbb{E}[T]= \\mu, \\quad \\mbox{and} \\quad \\text{Var}[T] = \\frac{\\mu^3}{\\lambda}. $$ \n",
    "\n",
    "The python function [scipy.stats.invgauss](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.invgauss.html#scipy.stats.invgauss) is implemented for $\\lambda=1$.    \n",
    "To generate a distribution with a different $\\lambda$, we have to scale both the variable $x$ and the mean $\\mu$:\n",
    "\n",
    "$$ x \\to \\frac{x}{\\lambda} \\quad \\mu \\to \\frac{\\mu}{\\lambda} $$\n",
    "\n",
    "The **IG distribution** is the distribution of the first passage time of a Brownian motion with drift $\\gamma \\geq 0$, for a barrier $\\delta>0$. \n",
    "\n",
    "If we let the barrier to be a linear function of the time $t$, we obtain the IG process. \n",
    "\n",
    "##### IG process\n",
    "\n",
    "The IG process $T_t$ can be defined as:\n",
    "\n",
    "$$ dZ_t = \\gamma dt + dW_t $$\n",
    "\n",
    "$$ T_t = \\inf \\bigl\\{ s>0 : Z_s = \\delta t \\bigr\\} $$\n",
    "\n",
    "where $\\{Z_s : s\\geq 0\\}$ is a Brownian motion with drift $\\gamma \\geq 0$ and unitary diffusion coefficient.   \n",
    "The IG process at time $t$ is distributed as \n",
    " \n",
    "$$ T_t \\sim IG \\biggl( \\frac{\\delta t }{\\gamma}, \\delta^2 t^2 \\biggr).$$\n",
    "\n",
    "It is useful to consider the parameterization in terms of mean ($\\mu$) and variance ($\\kappa$).    \n",
    "The variance is $\\text{Var}[T] = \\frac{\\mu^3}{\\lambda}$. By changing variables we get $\\text{Var}[T_t] = \\frac{\\delta t}{\\gamma^3}$. Let us call $$\\kappa = \\frac{\\delta}{\\gamma^3}.$$\n",
    "\n",
    "Ok... let us see if it works..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(seed=42)   \n",
    "paths=40000              # number of paths\n",
    "steps=10000              # number of time steps\n",
    "\n",
    "t = 2\n",
    "delta = 3*t            # time dependent barrier \n",
    "gamma = 2              # drift \n",
    "T_max = 20                \n",
    "T_vec, dt = np.linspace(0, T_max, steps, retstep=True)\n",
    "X0 = np.zeros((paths,1))                         # each path starts at zero\n",
    "increments = ss.norm.rvs(loc=gamma*dt, scale=np.sqrt(dt), size=(paths,steps-1))\n",
    "\n",
    "Z = np.concatenate((X0,increments), axis=1).cumsum(1)\n",
    "T = np.argmax(Z>delta, axis=1)*dt                # first passage time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Theoretical mean:  3.0\n",
      "Theoretical variance:  0.75\n",
      "Estimated mean:  3.017242724272428\n",
      "Estimated variance:  0.7578786228647868\n"
     ]
    }
   ],
   "source": [
    "x = np.linspace(0,10,10000)\n",
    "mm = delta/gamma\n",
    "lam = delta**2\n",
    "mm1 = mm/lam      # scaled mean\n",
    "\n",
    "plt.plot(x, ss.invgauss.pdf(x, mu=mm1, scale=lam), color=\"red\", label=\"IG density\" )\n",
    "plt.hist(T, density=True, bins=100, facecolor=\"LightBlue\", label=\"frequencies of T\")\n",
    "plt.title(\"First passage time distribution\"); plt.legend(); plt.show()\n",
    "\n",
    "print(\"Theoretical mean: \", mm); print(\"Theoretical variance: \", delta/gamma**3)\n",
    "print(\"Estimated mean: \", T.mean() ); print(\"Estimated variance: \", T.var())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Normal Inverse Gaussian (NIG)\n",
    "\n",
    "Following the same argument used to build the Variance Gamma process, we consider a Brownian motion with drift \n",
    "\n",
    "$$ X_t = \\theta t + \\sigma W_t$$ \n",
    "\n",
    "and substitute the time variable with an Inverse Gaussian random variable \n",
    "$T_t \\sim \\Gamma(t,\\kappa t)$,\n",
    "we obtain the **Normal Inverse Gaussian** process:\n",
    "\n",
    "$$\n",
    " X_{t} := \\theta T_t + \\sigma W_{T_t} .\n",
    "$$\n",
    "\n",
    "where we chose \n",
    "\n",
    "$$T_t \\sim IG\\biggl( \\mu=t, \\lambda= \\frac{t^2}{\\kappa} \\biggr),$$ \n",
    "\n",
    "with $\\delta=\\gamma$ and $\\kappa = 1/\\gamma^2$ in order to have $\\mathbb{E}[T_t]= t$.\n",
    "\n",
    "The NIG process depends on three parameters:\n",
    "\n",
    "- $\\sigma$, the volatility of the Brownian motion\n",
    "- $\\kappa$, the variance of the IG process\n",
    "- $\\theta$, the drift of the Brownian motion\n",
    "\n",
    "The characteristic function is: \n",
    "\n",
    "$$ \\phi_{X_t}(u) = \\frac{1}{\\kappa} \\biggl( 1 - \\sqrt{1 - i2 \\theta \\kappa u + \\sigma^2 \\kappa u^2} \\biggr) .$$\n",
    "\n",
    "The first four moments are: \n",
    "\n",
    "$$ \\begin{aligned}\n",
    " \\mathbb{E}[X_t] &= t\\theta. \\\\\n",
    " \\text{Var}[X_t] &= t(\\sigma^2 + \\theta^2 \\kappa). \\\\\n",
    " \\text{Skew}[X_t] &= \\frac{t (3\\theta^3\\kappa^2 + 3 \\sigma^2 \\theta \\kappa)}{\\bigl(\\mbox{Var}[X_t])^{3/2}}. \\\\ \n",
    " \\text{Kurt}[X_t] &= \\frac{t (3\\sigma^4 \\kappa + 18\\sigma^2 \\theta^2 \\kappa^2 +15\\theta^4\\kappa^3)}{\\bigl(\\mbox{Var}[X_t]\\bigr)^2}. \n",
    "\\end{aligned} $$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id='sec3.1'></a>\n",
    "## NIG Density\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Simulation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "T = 2           # terminal time \n",
    "N= 1000000      # number of generated random variables\n",
    "\n",
    "theta = -0.1    # drift of the Brownian motion \n",
    "sigma = 0.2     # volatility of the Brownian motion\n",
    "kappa = 0.5     # variance of the Gamma process\n",
    "\n",
    "lam = T**2 / kappa     # scale\n",
    "mus = T / lam          # scaled mu"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(seed=42) \n",
    "IG = ss.invgauss.rvs(mu=mus, scale=lam, size=N)    # The IG RV\n",
    "Norm = ss.norm.rvs(0,1,N)                          # The normal RV  \n",
    "X = theta * IG + sigma * np.sqrt(IG) * Norm"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### NIG Density"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def NIG_density(x,T,c,theta,sigma,kappa):\n",
    "    A = theta/(sigma**2)\n",
    "    B = np.sqrt( theta**2 + sigma**2/kappa ) / sigma**2\n",
    "    C = T/np.pi * np.exp(T/kappa) * np.sqrt( theta**2/(kappa*sigma**2) + 1/kappa**2 )\n",
    "    return C * np.exp(A*(x-c*T)) * scps.kv(1, B*np.sqrt((x-c*T)**2 + T**2 * sigma**2/kappa ) ) \\\n",
    "                / np.sqrt((x-c*T)**2 + T**2 * sigma**2/kappa )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The NIG density usually is indicated with the parameters:\n",
    "$$ \\beta = \\frac{\\theta}{\\sigma^2}, \\quad \\quad \\alpha = \\sqrt{ \\beta^2 + \\frac{1}{\\kappa \\sigma^2} } $$\n",
    "$$ \\delta = \\frac{T \\sigma}{\\sqrt{\\kappa}}, \\quad \\quad  \\mu = c T $$\n",
    "\n",
    "See [3] for instance. However, I prefer to use the ($\\theta,\\sigma,\\kappa$) parameters, as in [1].\n",
    "\n",
    "The following function corresponds to the NIG($\\alpha, \\beta, \\delta, \\mu$) density:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def NIG_abdmu(x,T,c,theta,sigma,kappa):\n",
    "    beta = theta/(sigma**2)\n",
    "    alpha = np.sqrt( beta**2 + 1/(kappa*sigma**2) )\n",
    "    delta = T*sigma/np.sqrt(kappa)\n",
    "    mu = c*T\n",
    "    g = lambda y: np.sqrt(delta**2 + (x-mu)**2)\n",
    "    cost = delta * alpha / np.pi\n",
    "    return cost * np.exp( delta*np.sqrt(alpha**2-beta**2) + beta*(x-mu) ) \\\n",
    "                * scps.kv(1, alpha*g(x-mu)) / g(x-mu)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Fourier inversion of the NIG characteristic function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "cf_NIG_b = partial(cf_NIG, t=T, mu=0, theta=theta, sigma=sigma, kappa=kappa ) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Histogram vs density vs Fourier inversion"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6IAAAE/CAYAAABcn34zAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdeVhV1eL/8fcCRAgHHNBKLK3rjIrmUDnkkFOm5ZBaZtfMbJ4n7/d3Levebt3qq5ZaRtfUtLSuUmmZWqmZpaYmqTnmjOKAigODAmf9/sD4iqKgHljnwOf1PD5x9l5n7w+nJ+PDWntvY61FREREREREpLAEuA4gIiIiIiIixYuKqIiIiIiIiBQqFVEREREREREpVCqiIiIiIiIiUqhUREVERERERKRQqYiKiIiIiIhIoVIRFRER8QJjTH9jzDzXOURERPyBiqiIiPg1Y8x2Y8w+Y0zYadsGG2MWnvbaGmP+ctrrGsaYacaYA8aYo8aYzcaY0caYyHOcY6AxZvE5zn0zgLX2Y2ttx3zknWiM+ecFfpsiIiJFioqoiIgUBUHAE/kZeKqQLgP2AI2stWWAFsAWoGWBJSwExpgg1xlERETyQ0VURESKgjeBZ40x4fkYOxz4yVr7tLU2HsBau99aO8paO+1iA5w+a2qyjDTG7DfGHDHGrDbGRBljhgD9geeNMceNMbNOja9jjFlojEkyxvxujOl+2nErGGNmnZq5XW6M+efps7OnZnsfMcZsBjaf2va2MWbXqfesNMa0Om38cGPMf40xU4wxx4wxa4wxNY0xfzuVd5cxJs+ZXRERkUuhIioiIkXBCmAh8Gw+xt4MzCjQNNARaA3UBMKBvsBBa20M8DHwhrW2lLW2mzGmBDALmAdUAh4DPjbG1Dp1rLFAMnA58NdTf850O9AcqHvq9XIgGigPfAL81xgTctr4bsBkoBywCphL1s8EVYBXgPcv9QMQERE5HxVREREpKl4EHjPGROQxriKw988XxphHT81EHjfGfHCe911/alz2H+Cqc4xNB0oDtQFjrV1vrU0413GBUsDr1tqT1tr5wFfAncaYQKAX8JK1NsVauw6YlMsxXrPWHrLWpgJYa6dYaw9aazOstf8LlARqnTb+R2vtXGttBvBfIOLU+dOBaUC1fM4ui4iIXBQVURERKRKstWvJKnBD8xh6ELjitPeNsdaGA6OAEud531Jrbfjpf4Cd58gyHxhD1mzmPmNMjDGmzDmOeyWwy1rrOW3bDrJmJyPIuv5112n7Tv86123GmGeMMetPLQtOAsqSVcD/tO+0r1OBRGtt5mmvIasci4iIFAgVURERKUpeAu4nq8Sdy/dAz4IOYq19x1p7HVCPrCW6z/2564yhe4CqxpjT/598FbAbOABkAKffzbdqbqf784tT14O+APQByp0qzEcAc/HfjYiIiHepiIqISJFhrf0D+BR4/DzDhgOtjDEjjDFVAIwxFYE63sphjGlqjGl+6vrPZCAN+HPGcR9wzWnDl50a87wxpoQxpg1Z13BOOzVLGQsMN8ZcZoypDdyTx+lLk1VeDwBBxpgXgXPNxoqIiDihIioiIkXNK0DYuXZaazeRdV1mJPCbMeYY8BNZM5PDvJShDPABcJisZbYHgbdO7RsP1D11nekX1tqTQHegC5AIvAvcY63dcGr8o2Qtrd1L1g2GpgInznPuucA3wKZT504j9+W8IiIizhhrz1whJCIiIr7KGPNv4HJrbW53zxUREfELmhEVERHxYcaY2saYBqeeTdoMuA/43HUuERGRSxHkOoCIiIicV2myluNeCewH/hf40mkiERGRS6SluSIiIiIiIlKotDRXRERERERECpWKqIiIiIiIiBQqZ9eIVqxY0VarVs3V6UVERERERKQArVy5MtFaG5HbPmdFtFq1aqxYscLV6UVERERERKQAGWN2nGufluaKiIiIiIhIoVIRFRERERERkUKlIioiIiIiIiKFytk1oiIiIiIiUnykp6cTHx9PWlqa6yjiZSEhIURGRlKiRIl8v0dFVEREREREClx8fDylS5emWrVqGGNcxxEvsdZy8OBB4uPjqV69er7fp6W5IiIiIiJS4NLS0qhQoYJKaBFjjKFChQoXPNOtIioiIiIiIoVCJbRouph/ryqiIiIiIiJSLBhjeOaZZ7Jfv/XWWwwfPhyA4cOH89Zbb2XvGzFiBLVr16Z+/fo0bNiQp59+mvT09PMef+HChdx6661ezfziiy/y3XffATBq1ChSUlK8enxXVERFREREClCmxxKzaAvRr8wjZtEWMj3WdSSRYqtkyZLExsaSmJh43nHjxo1j3rx5LF26lDVr1rB8+XIqVapEampqISX9P6+88go333wzoCIqIiIiIvmw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RArY009nPbJl3LhCK6EAq194CZORCf/zP4V2ThFfkumxxCzaQvQr84hZtIVMT94TaBcjLS2Ne++9l/r169OoUSMWLFgAwMSJE3n00Uezx916660sXLgQyCq0L774Is2bN2fJkiW0adOGFStWADBv3jxuuOEGGjduzB133JFdfKtVq8Yrr7xCy5Yt+e9//5sjw/Dhw3nrrbcAaNOmDS+88ALNmjWjZs2a/PjjjwA0b96c33//Pfs9bdq0YeXKlSQnJzNo0CCaNm1Ko0aN+PLLL7Pz33HHHXTr1o2OHTuSkJBA69atiY6OJioqKvu41apVIzExEYARI0YQFRVFVFQUo0aNAmD79u3UqVOH+++/n3r16tGxY0dSU1Mv+XP3RhFtAkwzxmwHegPvGmNu98JxRURERJxaOG0WTJvG+vseItZTqlDPnVL1arYMGJR1p961571npEiRsy0xmW6jFzPy280kpaQz8tvNdB+zmG2Jl/Zoo9TU1OxluT169ABg7NixAKxZs4apU6fy17/+lbS0tPMeJzk5maioKJYtW0bLli2ztycmJvLPf/6T7777jl9//ZUmTZowYsSI7P0hISEsXryYfv36nff4GRkZ/PLLL4waNYqXX34ZgH79+vHZZ58BkJCQwJ49e7juuut49dVXadeuHcuXL2fBggU899xzJJ96BNSSJUuYNGkS8+fP55NPPqFTp07ExcXx22+/ER0dneOcK1euZMKECSxbtoylS5fywQcfsGrVKgA2b97MI488wu+//054eDgzZszI87POyyUXUWttdWttNWttNWA68LC19otLTiYiIiLiSKbHEvPDFp74JY1329zNhnsfdpJj0+BHoHRpGDbMyflFXOn93s9s2HuU1PSsRZep6ZmsTzhK7/d+vqTjhoaGEhcXR1xcHJ9//jkAixcvZsCAAQDUrl2bq6++mk2bNp33OIGBgfTq1eus7UuXLmXdunW0aNGC6OhoJk2axOmXI/bt2zdfOXv27AnAddddl30da58+fbJnUj/77DPuuOMOIGsG9vXXXyc6Opo2bdqQlpbGzp07AejQoQPly5cHoGnTpkyYMIHhw4ezZs0aSpcuneOcixcvpkePHoSFhVGqVCl69uyZPWtavXr17OJ6eqZLkZ/Ht0wFlgC1jDHxxpj7jDEPGmMevOSzi4iIiPiY7JmYues5EnwZbzfvw1vzd3HgyPlnSArCyXLl4dln4Ysv4JdfCv38Iq7UqFyKM1fieizUrFw69zdcgnPdMycoKAiPx5P9+vRZ0pCQkFyv8bTW0qFDh+yyu27dOsaPH5+9PywsLF+ZSpYsCWQV3oyMDACqVKlChQoVWL16NZ9++mn2rKq1lhkzZmSfc+fOndnXap5+vtatW7No0SKqVKnCgAEDzro50vnuHfRnnjMzXYr83DX3TmvtFdbaEtbaSGvteGvtOGvtuFzGDjzXjYpERERE/EH2TIwn63rQEwSw53Aqo2eff4akwDz5JJQvD//8p5vzizjQt2lVwoJzFr2w4ED6NI30+rlat27Nxx9/DMCmTZvYuXMntWrVolq1asTFxeHxeNi1axe/5OOXQddffz0//fQTf/zxBwApKSl5zq5eiH79+vHGG29w5MgR6tevD0CnTp0YPXp0dpH8czntmXbs2EGlSpW4//77ue+++/j1119z7G/dujVffPEFKSkpJCcn8/nnn9OqVSuvZT+TN64RFRERESkSYjcmEF46+KyZGGvh8vAQN5n2HGdd/0EwaxbfzfzeSQaRwta+TmUCA3LeHCwwwNC+TmWvn+vhhx8mMzOT+vXr07dvXyZOnEjJkiVp0aIF1atXp379+jz77LM0btw4z2NFREQwceJE7rzzTho0aMD111/Phg0bvJa1d+/eTJs2jT59+mRvGzZsGOnp6TRo0ICoqCiGnWMp/8KFC4mOjqZRo0bMmDGDJ554Isf+xo0bM3DgQJo1a0bz5s0ZPHgwjRo18lr2M+Xr8S0FoUmTJvbPO0uJiIiI+ILYjQnErY1nxk87SA4Ozd4eHBRA7xur0uTaCk5ylTiSROd2zdh7Uzuqfv2lkwwil8oXHt8iBcfF41tEREREioxui2IJ9OR8Kl1AgKFe1XBHiSC9bDhb77yHyDlfgZ7DLiJFQME+1VRERETEjwQdP07DSeOY27gpS96b5DpODlvvGkiNCe9j3n0X/v1v13FERC6JZkRFRERETrnmkwkEH0liw8NPuY5yltQrI9l18y3ELI0n+uW5xCzaQuaZF7OKiPgJzYiKiIiIABw/To0J77O3dTsO14/Oe3whO3AkjQHX38+BoydITc1g5Leb+TJuD2Puakz1ivl7JISIiK/QjKiIiIgIwLhxlDx8iA0PPek6Sa5Gz97ErhMBpJ66iVJqeibrE47S+72fHScTEblwKqIiIiIiKSnw5pvsu7EVhxrleoNH5yqHh3Dmww48FmpWLu0mkIjIJVARFREREZk0CfbvZ8NDvndt6J+a16xAyaCcP7oFBwXQp2mko0Qi/uedd96hTp069O/f33WUfJk5cyavv/56gR3/XJ9HbGws7du3z369ePFioqOjycjI8Nq59RxRERERKd48HqhdG8qVI3bS52CM60S5Sj2ZyT/+u5a0k//3aJnQIMOyv3egTEgJh8lE8ufM50zGbkzw6vF71roizzG1a9fmm2++oXr16jm2Z2RkEBRU/G6fc67PA6Br167079+fPn360LhxY8aNG8eNN954zmPpOaIiIiIiF+Krr2DzZnj6aZ8toQChwYH8q39DRtzbmPc6VWLbG92YcWS+SqhIPj344INs3bqV7t27M3LkSIYPH86QIUPo2LEj99xzD5mZmTz33HM0bdqUBg0a8P777wNgreXRRx+lbt26dO3alVtuuYXp06cDUK1aNRITEwFYsWIFbdq0ASA5OZlBgwbRtGlTGjVqxJdffgnAxIkT6dmzJ507d6ZGjRo8//zz2fnmzJlD48aNadiwYfZs5MSJE3n00UcBOHDgAL169aJp06Y0bdqUn376CYAffviB6OhooqOjadSoEceOHTvrex8xYgRRUVFERUUxatSoXD+PM40ePZq///3vvPTSSzRt2vS8JfRiFL/aLyIiInJK7MYEWv3zdcKurMLcKO/+kFWQUq+MZP8Nrbg69lN4+w0I0NyCSF7GjRvHnDlzWLBgARUrVmT48OGsXLmSxYsXExoaSkxMDGXLlmX58uWcOHGCFi1a0LFjR1atWsXGjRtZs2YN+/bto27dugwaNOi853r11Vdp164dH374IUlJSTRr1oybb74ZgLi4OFatWkXJkiWpVasWjz32GCEhIdx///0sWrSI6tWrc+jQobOO+cQTT/DUU0/RsmVLdu7cSadOnVi/fj1vvfUWY8eOpUWLFhw/fpyQkJAc71u5ciUTJkxg2bJlWGtp3rw5N91001mfx5muueYa+vbty5gxY9iyZcslfPK5UxEVERGRYit87Woili9h9QsvYf1sWd6Onn1p9uwjsHAhtGvnOo6IX+revTuhoVl3op43bx6rV6/Onu08cuQImzdvZtGiRdx5550EBgZy5ZVX0i4f/73NmzePmTNn8tZb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\n",
      "text/plain": [
       "<Figure size 1152x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(X.min(), X.max(), 500)\n",
    "y = np.linspace(-2,1,30)\n",
    "\n",
    "plt.figure(figsize=(16,5))\n",
    "plt.plot(x, NIG_density(x,T,0,theta,sigma,kappa), color='r', label=\"NIG density\")\n",
    "plt.plot(y,[Gil_Pelaez_pdf(i,cf_NIG_b,np.inf) for i in y], 'p', label=\"Fourier inversion\" )\n",
    "plt.hist(X, density=True, bins=200, facecolor=\"LightBlue\", label=\"frequencies of X\")\n",
    "plt.legend(); plt.title(\"NIG Histogram\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "qqplot(X, line='s');  plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id='sec3.2'></a>\n",
    "## Parameter estimation\n",
    "\n",
    "Since the moments at first order in $\\theta$ are the same as in the VG process, we can use the same technique to get an approximated estimate of the parameters.\n",
    "\n",
    "After that we can use those approximated values as initial guess for the MLE estimation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Estimated parameters: \n",
      "\n",
      " c=-0.029490461790484923 \n",
      " theta=-0.0703900720616428 \n",
      " sigma=0.21211113318032002 \n",
      " kappa=0.708309868095375\n",
      "\n",
      "Estimated c + theta =  -0.09988053385212772\n"
     ]
    }
   ],
   "source": [
    "sigma_mm1 =  np.std(X) / np.sqrt(T)                                \n",
    "kappa_mm1 = T * ss.kurtosis(X)/3                              \n",
    "theta_mm1 = np.sqrt(T) * ss.skew(X) * sigma_mm1 / (3*kappa_mm1)   \n",
    "c_mm1     = np.mean(X)/T - theta_mm1\n",
    "\n",
    "print(\"Estimated parameters: \\n\\n c={} \\n theta={} \\n sigma={} \\n \\\n",
    "kappa={}\\n\".format(c_mm1,theta_mm1,sigma_mm1,kappa_mm1))\n",
    "print(\"Estimated c + theta = \", c_mm1 + theta_mm1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 1min 3s, sys: 496 ms, total: 1min 4s\n",
      "Wall time: 1min 4s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "      fun: 194108.02930114965\n",
       " hess_inv: <4x4 LbfgsInvHessProduct with dtype=float64>\n",
       "      jac: array([ 4.3772161 ,  3.37895472, 15.08451533,  0.24738256])\n",
       "  message: b'CONVERGENCE: REL_REDUCTION_OF_F_<=_FACTR*EPSMCH'\n",
       "     nfev: 115\n",
       "      nit: 19\n",
       "   status: 0\n",
       "  success: True\n",
       "        x: array([ 0.00104102, -0.10092152,  0.19980907,  0.49902665])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "def log_likely_NIG(x, data, T):\n",
    "    return (-1) * np.sum( np.log( NIG_density(data, T, x[0], x[1], x[2], x[3]) ))\n",
    "\n",
    "minimize(log_likely_NIG, x0=[c_mm1,theta_mm1,sigma_mm1,kappa_mm1], method='L-BFGS-B', args=(X,T), tol=1e-8,\n",
    "        bounds=[[-1,1],[-1,-1e-15],[1e-15,2],[1e-15,None]])  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## References\n",
    "\n",
    "[1] Rama Cont and Peter Tankov (2003) \"Financial Modelling with Jump Processes\", Chapman and Hall/CRC; 1 edition.  \n",
    "\n",
    "[2] Madan D. and Seneta E. (1990) \"The Variance Gamma model for share market returns\". The journal of Business. 63(4), 511-524 \n",
    "\n",
    "[3] Barndorff-Nielsen, Ole E. (1998) \"Processes of Normal Inverse Gaussian type\" Finance and Stochastics 2, 41-68."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
